/**
 * 字典数据组合式函数
 */
import { ref, onMounted } from 'vue'
import type { DictItem } from '@/api/types'

/**
 * 字典Hook
 * @param fetchApi 获取字典数据的API函数（可选）
 * @param defaultData 默认字典数据
 */
export function useDict(
  fetchApi?: () => Promise<any>,
  defaultData: DictItem[] = []
) {
  // 字典数据
  const dictData = ref<DictItem[]>(defaultData)

  // 加载状态
  const loading = ref(false)

  /**
   * 获取字典数据
   */
  const fetchDict = async () => {
    if (!fetchApi) return

    try {
      loading.value = true
      const { data } = await fetchApi()
      dictData.value = data || []
    } catch (error) {
      console.error('fetchDict error:', error)
      dictData.value = []
    } finally {
      loading.value = false
    }
  }

  /**
   * 根据值获取标签
   */
  const getLabel = (value: string | number): string => {
    const item = dictData.value.find((item: DictItem) => item.value === value)
    return item?.label || ''
  }

  /**
   * 根据标签获取值
   */
  const getValue = (label: string): string | number => {
    const item = dictData.value.find((item: DictItem) => item.label === label)
    return item?.value || ''
  }

  // 挂载时自动获取数据
  if (fetchApi) {
    onMounted(() => {
      fetchDict()
    })
  }

  return {
    dictData,
    loading,
    fetchDict,
    getLabel,
    getValue
  }
}

/**
 * 常用字典数据
 */

// 用户状态
export const userStatusDict: DictItem[] = [
  { label: '正常', value: 1 },
  { label: '禁用', value: 0 }
]

// 审核状态
export const auditStatusDict: DictItem[] = [
  { label: '待审核', value: 0 },
  { label: '已通过', value: 1 },
  { label: '已拒绝', value: 2 }
]

// 性别
export const sexDict: DictItem[] = [
  { label: '女', value: '0' },
  { label: '男', value: '1' }
]

// 菜单类型
export const menuTypeDict: DictItem[] = [
  { label: '目录', value: 1 },
  { label: '菜单', value: 2 },
  { label: '按钮', value: 3 }
]

// 显示状态
export const visibleDict: DictItem[] = [
  { label: '显示', value: 1 },
  { label: '隐藏', value: 0 }
]

// 启用状态
export const statusDict: DictItem[] = [
  { label: '启用', value: 1 },
  { label: '禁用', value: 0 }
]
